// 0.通过终端等方式安装axios到本项目中

import axios from "axios";
// 路由实例对象
import router from '@/router/';

// 1.配置baseURL：自动补全URL域名(网站购买新域名后，仅替换该处即可)
axios.defaults.baseURL = 'http://www.shop.net/adminapi';

// 2.配置响应拦截器、请求拦截器

// 请求拦截器：添加token，用于身份验证
axios.interceptors.request.use(function (config) {
    // 装载token
    let token = sessionStorage.token;
    // 根据api文档，设置headers
    // config.headers['Authori-zation'] = token;
    // config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
    // config.headers['Content-Type'] = 'application/json';
    //设置headers
    Object.assign(config.headers, { 'Authori-zation': token })
    if (config.url == '/file/upload' || config.url == '/file/video_upload') {
        Object.assign(config.headers, { 'Content-Type': "multipart/form-data" })
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 响应拦截器：状态码是200，解构返回的数据
axios.interceptors.response.use(function (response) {
    // 去除axios返回的包裹物response
    return response.data;
}, function (error) {
    // 响应状态码
    console.log(error);
    let { status } = error.response;
    // 当前请求的接口
    let { url } = error.config;
    switch (status) {
        case 401:
            let { message } = error.response.data.inner;
            // 消息弹窗
            ElNotification.error({
                title: `错误：${status} -- ${message}`,
                message: 'access_token失效，请重新登录！',
            });
            // 获取目标地址
            console.log(router);
            let { fullPath } = router.currentRoute.value;

            // 重定向(注意与路由的重定向写法不同)
            router.replace({
                path: '/login',
                // 此处的fullPath改为url也可以
                query: { redirect: fullPath },
            });
            break;
        case 403:
            break;
        case 404:
            ElNotification.error({
                title: `错误：${status}`,
                message: `接口地址错误，当前API接口：${url}！`,
            });
            break;
        case 500:
            ElNotification.error({
                title: `错误：${status}`,
                message: `API接口：${url}，请联系后端工程师！`,
            });
            break;
        default:
            ElNotification.error({
                title: `错误：${status}`,
                message: `API接口：${url}，请查看AJAX发送记录！`,
            });
            break;

    }
});

export default axios;

// 3.将axios文件引入到入口文件(main.js)中才能生效